#ifndef CMYLISTWIDGET_H
#define CMYLISTWIDGET_H

#include "CMyListWidgetItem.h"

#include <QWidget>

namespace Ui {
class CMyListWidget;
}

class CMyListWidget : public QWidget {
    Q_OBJECT

  public:
    explicit CMyListWidget(QWidget* parent = nullptr);
    ~CMyListWidget();

    // 增加项
    void addListWidgetItem(void* data, std::function<void(void* pData, QString& showText, QString& tipText)> showTextFunction, Qt::CheckState checkState = Qt::Unchecked);

    // 数据获取
    QListWidgetItem* getItem(int index);
    QListWidgetItem* getItem(const QPoint& point);

    void* getItemData(int index);
    void* getItemData(const QPoint& point);

    QModelIndex currentIndex();
    int getItemId(int index);
    void clearItems();
    int getItemCount();

    QVector<QListWidgetItem*> getCheckedItem();
    QVector<void*> getCheckedItemData();

    int removeItem(int index);       // 删除后返回项的id
    void updateShowText(int index);  // 更新显示文本

  signals:
    // list 信号
    void currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);
    void currentRowChanged(int currentRow);
    void currentTextChanged(const QString& currentText);
    void itemActivated(QListWidgetItem* item);
    void itemChanged(QListWidgetItem* item);
    void itemClicked(QListWidgetItem* item);
    void itemDoubleClicked(QListWidgetItem* item);
    void itemEntered(QListWidgetItem* item);
    void itemPressed(QListWidgetItem* item);
    void itemSelectionChanged();

  private slots:
    void slotItemClicked(QListWidgetItem* item);

    void on_btnSelectAll_clicked();

  private:
    void initData();
    void updateCount();

  private:
    Ui::CMyListWidget* ui;
    int m_nCurrentCount;                                                                       // 当前添加数目，用于控制创建的项的id
    std::function<void(void* pData, QString& showText, QString& tipText)> m_ShowTextFunction;  // 项的显示文本方式
    int m_nSelectCount;                                                                        // 选中项数目
};

#endif  // CMYLISTWIDGET_H
